package com.seecen.HJM.service;


import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.seecen.HJM.model.dto.UserLoginDTO;
import com.seecen.HJM.model.dto.UserResetPasswordDTO;
import com.seecen.HJM.model.entity.User;
import com.seecen.HJM.model.vo.UserVO;
import com.seecen.HJM.result.DataVo;

import java.time.LocalDateTime;
import java.util.List;

/**
 * <p>
 * 服务类
 * </p>
 *
 * @author sunpingli
 * @since 2025-01-09
 *
 */
public interface IUserService extends IService<User> {


    /**
     * 注册新用户
     */
    String registerUser(User user);

    // 用户信息
    DataVo<UserVO> userInfo();
    //用户名登录
    DataVo<String> loginByUsername(UserLoginDTO loginDTO);

    //邮箱登录
    DataVo<String> loginByEmail(UserLoginDTO loginDTO);

    //忘记密码
    DataVo resetUserPassword(UserResetPasswordDTO userResetPasswordDTO);
    // 发送验证码

    DataVo sendVerificationCode(String email);

    // 验证验证码
    boolean verifyVerificationCode(String email, String verificationCode);

    //退出登录
    DataVo logout(String token);
    /**
     * 新增用户（注册账号并完善基本信息：昵称、头像、绑定手机）
     *
     * @param user 用户信息
     * @return 是否成功
     */
    Boolean register(User user);

    /**
     * 用户查询（根据用户名/手机号/邮箱等条件搜索用户）
     *
     * @param keyword 查询关键字
     * @return 用户列表
     */
    List<User> searchUsers(String keyword);

    /**
     * 编辑用户信息（修改昵称、头像、绑定手机、重置密码）
     *
     * @param userId     用户ID
     * @param username   昵称
     * @param userAvatar 头像
     * @param phone      手机号
     * @param password   密码
     * @return 是否成功
     */
    boolean updateUser(Long userId, String username, String userAvatar, String phone, String password, String email, Integer userStatus, LocalDateTime updateTime,String introduction);

    /**
     * 删除用户（注销账号或后台删除违规/无效用户）
     *
     * @param userId 用户ID
     * @return 是否成功
     */
    boolean deleteUser(Long userId);

    /**
     * 本月活跃用户数（查看当月登录并使用的用户总量）
     *
     * @return 活跃用户数
     */
//    long getActiveUsersThisMonth(LocalDateTime startDateTime,LocalDateTime endDateTime);

    long getActiveUsersThisMonth();
    /**
     * 用户总量（查看平台注册用户的累计总数）
     *
     * @return 用户总量
     */
    long getTotalUsers();

    List<User> findWithUserItems(IPage<User> userIPage, QueryWrapper<User> queryWrapper);

    // 更新用户头像
//    DataVo updateUserAvatar(String avatarUrl);

    DataVo updateUserAvatar(Long userId, String avatarUrl);
}
